linux 2.6 kernel keyboard use a timer to poll the kbd state,in
virtualization environment,the kbd interrupt injection is very likely
to happend just after kbd state query in the kbd timer and thus
will reverse sequence of scan code.
Also fix env->send_event SMP issue.
Signed-off-by: Xiaofeng Ling <xiaofeng.ling@intel.com>
Signed-off-by: Edwin Zhai<edwin.zhai@intel.com>
Signed-off-by: Eddion Dong <eddie.dong@intel.com>
Signed-off-by: Asit Mallick <asit.k.mallick@intel.com>
FD_ZERO(&wakeup_rfds);
FD_SET(evtchn_fd, &wakeup_rfds);
highest_fds = evtchn_fd;
+ env->send_event = 0
while (1) {
if (vm_running) {
if (shutdown_requested) {
tv.tv_sec = 0;
tv.tv_usec = 100000;
- env->send_event = 0;
retval = select(highest_fds+1, &wakeup_rfds, NULL, NULL, &tv);
if (retval == -1) {
perror("select");
#define ULONGLONG_MAX ULONG_MAX
#endif
- main_loop_wait(0);
tun_receive_handler(&rfds);
if ( FD_ISSET(evtchn_fd, &rfds) ) {
cpu_handle_ioreq(env);
}
+ main_loop_wait(0);
if (env->send_event) {
+ env->send_event = 0;
struct ioctl_evtchn_notify notify;
notify.port = ioreq_local_port;
(void)ioctl(evtchn_fd, IOCTL_EVTCHN_NOTIFY, ¬ify);